home *** CD-ROM | disk | FTP | other *** search
- *******************************************
- * CopyMemQuicker060 *
- * Uses Move16 only in Adresses >$00ffffff *
- * *
- * Include File V1.4 *
- * written by Dirk Busse *
- * 3. Apr. 1999 *
- *******************************************
-
- PatchStart
-
- tst.l d0
- beq.b squit
- move.w a1,d1 ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
- btst #0,d1
- beq.b .skip1
- move.b (a0)+,(a1)+ ;Zieladresse auf EVEN setzen
- subq.l #1,d0
- beq.b squit
- move.w a1,d1
- .skip1 btst #1,d1
- beq.b .skip2
- cmpi.l #1,d0
- bne.b .two
- move.b (a0)+,(a1)+
- rts
-
- ; cnop 0,4
-
- .two move.w (a0)+,(a1)+ ;Zieladresse auf LONG setzen
- subq.l #2,d0
- beq.b squit
- .skip2
- cmpi.l #%0000100000010000,d0 ;prüfen, ob d0 >=2064
- bcc.b bigmove
-
- smlmove move.l d0,d1
- lsr.w #2,d1 ;d0 ist hier nur noch maximal 12Bit lang
- beq.b .nolong
- .loop move.l (a0)+,(a1)+
- subq.w #1,d1
- bne.b .loop
-
- .nolong btst #1,d0
- beq.b .skip
- move.w (a0)+,(a1)+ ;letztes Word uebertragen
- .skip btst #0,d0
- beq.b squit
- move.b (a0)+,(a1)+ ;letztes Byte uebertragen
- squit rts
-
- ; cnop 0,4
-
- bigmove cmpa.l #$01000000,a0 ;Ist Quelladresse >$00ffffff ?
- bcs.b bigmov
- cmpa.l #$01000000,a1 ;Ist Zieladresse >$00ffffff ?
- bcs.b bigmov
- move.w a1,d1
- btst #2,d1
- beq.b .skip1
- subq.l #%100,d0 ;Zieladresse auf 8-Byte-Block legen
- move.l (a0)+,(a1)+
- move.w a1,d1
- .skip1 btst #3,d1
- beq.b .dest16
- subq.l #%1000,d0 ;Zieladresse auf 16-Byte-Block legen
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- .dest16 move.w a0,d1
- andi.b #15,d1
- bne.b bigmov ;wenn Quelladresse nicht im 16-Byte-Block liegt
-
- move.l d0,d1
- lsr.l #7,d1
- .loop move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000001111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b smlmove
- rts
-
- ; cnop 0,4
-
- bigmov move.l d0,d1
- lsr.l #6,d1
- .loop move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000000111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b smlmove
- rts
-
- cnop 0,4
- **************************************************************************
-
- Quickest
- lsr.l #2,d0
- cmpi.l #%0000001000000100,d0 ;prüfen, ob d0 >=2064/4
- bcc.b bigmo16
-
- smlmovQ tst.w d0 ;d0 ist hier nur noch maximal 10 Bit lang
- beq.b squitQ
- sloopQ move.l (a0)+,(a1)+
- subq.w #1,d0
- bne.b sloopQ
- squitQ rts
-
- ; cnop 0,4
-
- bigmo16 cmpa.l #$01000000,a0 ;Ist Quelladresse >$00ffffff ?
- bcs.b bigmovQ
- cmpa.l #$01000000,a1 ;Ist Zieladresse >$00ffffff ?
- bcs.b bigmovQ
- move.w a1,d1
- btst #2,d1
- beq.b .skip1
- subq.l #1,d0 ;Zieladresse auf 8-Byte-Block legen
- move.l (a0)+,(a1)+
- move.w a1,d1
- .skip1 btst #3,d1
- beq.b .dest16
- subq.l #2,d0 ;Zieladresse auf 16-Byte-Block legen
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- .dest16 move.w a0,d1
- andi.b #15,d1
- bne.b bigmovQ ;wenn Quelladresse nicht im 16-Byte-Block liegt
-
- move.l d0,d1
- lsr.l #5,d1
- .loop move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- move16 (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b sloopQ
- rts
-
- ; cnop 0,4
-
- bigmovQ move.l d0,d1
- lsr.l #4,d1
- .loop move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
- subq.l #1,d1
- bne.b .loop
- and.w #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
- bne.b sloopQ
- rts
-
- cnop 0,4
-
- PatchEnd
-
-